using System.Collections.Generic;
using UnityEngine;

/// <summary>
/// 子弹外观类（外观模式）
/// 统一管理子弹的外观、效果、行为，隐藏复杂的转换逻辑
/// </summary>
public class BulletFacade
{
    private Bullet m_Bullet;
    private BulletEnhancement m_Enhancement;

    public BulletFacade(Bullet bullet)
    {
        m_Bullet = bullet;
        m_Enhancement = bullet.GetComponent<BulletEnhancement>();
        if (m_Enhancement == null)
        {
            m_Enhancement = bullet.gameObject.AddComponent<BulletEnhancement>();
        }
    }

    /// <summary>
    /// 替换子弹预制体（外观）
    /// </summary>
    public void ReplacePrefab(GameObject newPrefab)
    {
        if (m_Bullet == null || newPrefab == null)
        {
            Logger.LogWarning("BulletFacade", "子弹或新预制体为空，无法替换");
            return;
        }

        // 保存当前状态
        Vector3 position = m_Bullet.transform.position;
        Quaternion rotation = m_Bullet.transform.rotation;
        Transform parent = m_Bullet.transform.parent;
        Entity owner = m_Bullet.GetOwner();
        IMovementStrategy movement = m_Bullet.GetMovement();

        // 创建新子弹实例
        GameObject newBulletObj = GameObject.Instantiate(newPrefab, position, rotation, parent);
        Bullet newBullet = newBulletObj.GetComponent<Bullet>();
        
        if (newBullet == null)
        {
            Logger.LogError("BulletFacade", $"新预制体 {newPrefab.name} 没有 Bullet 组件");
            GameObject.Destroy(newBulletObj);
            return;
        }

        // 转移增强组件
        if (m_Enhancement != null)
        {
            BulletEnhancement newEnhancement = newBulletObj.GetComponent<BulletEnhancement>();
            if (newEnhancement == null)
            {
                newEnhancement = newBulletObj.AddComponent<BulletEnhancement>();
            }
            newEnhancement.CopyFrom(m_Enhancement);
        }

        // 重新初始化新子弹
        newBullet.Initialize(owner, movement);

        // 更新子弹类型为火焰（如果新预制体是火焰子弹）
        // 注意：这里假设新预制体的BulletData已经正确设置了BulletType
        // 如果需要强制设置为Fire类型，可以通过反射或添加公共方法

        // 销毁旧子弹
        BulletPool.Instance.ReturnBullet(m_Bullet);
        
        // 更新引用
        m_Bullet = newBullet;
        m_Enhancement = newBullet.GetComponent<BulletEnhancement>();
        
        Logger.Log("BulletFacade", $"子弹外观已替换: {newPrefab.name}");
    }

    /// <summary>
    /// 应用效果增强
    /// </summary>
    public void ApplyEnhancement(IBulletConverterData converterData)
    {
        if (m_Enhancement == null || converterData == null)
        {
            return;
        }

        m_Enhancement.SetDamageMultiplier(converterData.DamageMultiplier);
        m_Enhancement.SetBonusDamage(converterData.BonusDamage);
        m_Enhancement.SetBuffsToAdd(converterData.BuffsToAdd);
        m_Enhancement.SetEffectsToAdd(converterData.EffectsToAdd);

        Logger.Log("BulletFacade", $"已应用效果增强: 伤害倍数={converterData.DamageMultiplier}, 额外伤害={converterData.BonusDamage}");
    }

    /// <summary>
    /// 获取当前子弹实例（供外部使用）
    /// </summary>
    public Bullet GetBullet()
    {
        return m_Bullet;
    }
}

